home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 4.8 KB | 267 lines |
- 10 ' **********************
- 20 ' ** FUNCTION **
- 30 ' **********************
- 40 '
- 50 CLEAR
- 60 SCREEN 0,0,0,0
- 70 WIDTH 80
- 80 KEY OFF
- 90 '
- 100 WHILE NOT FINISHED
- 110 CLS
- 120 PRINT TAB(18)"* * * FUNCTION ANALYSIS * * *
- 130 LOCATE 4
- 140 PRINT TAB(21)"Analysis in an interval
- 150 PRINT
- 160 PRINT TAB(26)"<1> Minimum point
- 170 PRINT TAB(26)"<2> Maximum point
- 180 PRINT TAB(26)"<3> Zero point
- 190 PRINT TAB(26)"<4> Area by integration
- 200 PRINT TAB(26)"<5> Sketch
- 210 PRINT
- 220 PRINT TAB(21)"Analysis at a point
- 230 PRINT
- 240 PRINT TAB(26)"<6> Value of f(X)
- 250 PRINT TAB(26)"<7> First derivative
- 260 PRINT
- 270 PRINT TAB(26)"<8> End
- 280 PRINT
- 290 PRINT
- 300 PRINT
- 310 PRINT TAB(21)".... SELECT ONE ....";
- 320 GOSUB 440
- 330 ON SELECTION GOSUB 870,1120,1370,1800,2030,2430,2510,390,370
- 340 WEND
- 350 '
- 360 ' Subroutine, immediate return for choice "9"
- 370 RETURN
- 380 '
- 390 ' Terminate program
- 400 CLS
- 410 END
- 420 '
- 430 ' Subroutine, wait for digit selection
- 440 K$ = INKEY$
- 450 IF K$ = "" THEN 440
- 460 IF K$ < "1" OR K$ > "9" THEN 440
- 470 SELECTION = VAL(K$)
- 480 RETURN
- 490 '
- 500 ' Subroutine, get X for point of concern
- 510 CLS
- 520 LOCATE 9,9
- 530 INPUT "Enter value for X ... ",X
- 540 RETURN
- 550 '
- 560 ' Subroutine, get X1 and X2 for interval
- 570 CLS
- 580 LOCATE 7,9
- 590 PRINT "Interval will be from X1 to X2 ...
- 600 LOCATE 10,9
- 610 INPUT "Enter value for X1 ... ",X1
- 620 LOCATE 11,9
- 630 INPUT "Enter value for X2 ... ",X2
- 640 IF X2 < X1 THEN SWAP X1, X2
- 650 RETURN
- 660 '
- 670 ' Subroutine, wait for user before proceeding
- 680 PRINT
- 690 PRINT
- 700 PRINT
- 710 PRINT "Press <space bar> to continue ...";
- 720 K$ = INKEY$
- 730 IF K$ <> " " THEN 720
- 740 RETURN
- 750 '
- 760 ' Subroutine, slope of function given a delta
- 770 XT = X
- 780 X = XT - DELTA / 2
- 790 GOSUB 9000
- 800 Y1 = Y
- 810 X = XT + DELTA / 2
- 820 GOSUB 9000
- 830 SLOPE = (Y - Y1) / DELTA
- 840 X = XT
- 850 RETURN
- 860 '
- 870 ' Minimum
- 880 GOSUB 570
- 890 CLS
- 900 PRINT "Finding a minimum point ...
- 910 PRINT
- 920 WHILE X1 <> X2
- 930 PRINT ,,X1,X2
- 940 FOR DX = 0 TO 10
- 950 X = X1 + DX * (X2 - X1) / 10
- 960 GOSUB 9000
- 970 IF DX > 0 AND Y > MIN THEN 1000
- 980 MIN = Y
- 990 X3 = DX
- 1000 NEXT DX
- 1010 X4 = X1
- 1020 X5 = X2
- 1030 IF X3 < 6 THEN X2 = X1 + 6 * (X2 - X1) / 10
- 1040 IF X3 > 5 THEN X1 = X1 + 5 * (X2 - X1) / 10
- 1050 IF X1 = X4 AND X2 = X5 THEN X1 = X2
- 1060 WEND
- 1070 PRINT
- 1080 PRINT "Minimum point at X = ";X1;" is Y = ";Y
- 1090 GOSUB 680
- 1100 RETURN
- 1110 '
- 1120 ' Maximum
- 1130 GOSUB 570
- 1140 CLS
- 1150 PRINT "Finding a maximum point ...
- 1160 PRINT
- 1170 WHILE X1 <> X2
- 1180 PRINT ,,X1,X2
- 1190 FOR DX = 0 TO 10
- 1200 X = X1 + DX * (X2 - X1) / 10
- 1210 GOSUB 9000
- 1220 IF DX > 0 AND Y < MAX THEN 1250
- 1230 MAX = Y
- 1240 X3 = DX
- 1250 NEXT DX
- 1260 X4 = X1
- 1270 X5 = X2
- 1280 IF X3 < 6 THEN X2 = X1 + 6 * (X2 - X1) / 10
- 1290 IF X3 > 5 THEN X1 = X1 + 5 * (X2 - X1) / 10
- 1300 IF X1 = X4 AND X2 = X5 THEN X1 = X2
- 1310 WEND
- 1320 PRINT
- 1330 PRINT "Maximum point at X = ";X1;" is Y = ";Y
- 1340 GOSUB 680
- 1350 RETURN
- 1360 '
- 1370 ' Zero
- 1380 GOSUB 570
- 1390 CLS
- 1400 PRINT "Looking for zero crossing between X1 = ";X1;" and X2 = ";X2
- 1410 X = X1
- 1420 GOSUB 9000
- 1430 Y1 = Y
- 1440 X = X2
- 1450 GOSUB 9000
- 1460 Y2 = Y
- 1470 IF SGN(Y1) <> SGN(Y2) THEN 1600
- 1480 FOR I = 1 TO 27
- 1490 X = X1 + I * (X2 - X1) / 28
- 1500 GOSUB 9000
- 1510 IF SGN(Y) = SGN(Y1) THEN 1540
- 1520 X2 = X
- 1530 Y2 = Y
- 1540 NEXT I
- 1550 IF SGN(Y1) * SGN(Y2) = -1 THEN 1600
- 1560 PRINT
- 1570 PRINT "There doesn't appear to be a zero crossing point
- 1580 PRINT "in the given interval.
- 1590 GOTO 1770
- 1600 PRINT
- 1610 WHILE X1 <> X2
- 1620 PRINT ,,X1,X2
- 1630 X = (X1 + X2) / 2
- 1640 GOSUB 9000
- 1650 X3 = X1
- 1660 X4 = X2
- 1670 IF SGN(Y) = SGN(Y1) THEN 1710
- 1680 X2 = X
- 1690 Y2 = Y
- 1700 GOTO 1730
- 1710 X1 = X
- 1720 Y1 = Y
- 1730 IF X1 = X3 AND X2 = X4 THEN X1 = X2
- 1740 WEND
- 1750 PRINT
- 1760 PRINT "Zero crossing is very near X = ";X
- 1770 GOSUB 680
- 1780 RETURN
- 1790 '
- 1800 ' Subroutine, integration
- 1810 GOSUB 570
- 1820 CLS
- 1830 PRINT "Integration by Simpson's rule ...
- 1840 LOCATE 5,1
- 1850 PRINT "Area under curve from X1 = ";X1;" to X2 = ";X2
- 1860 PRINT
- 1870 FOR I = 2 TO 7
- 1880 AREA = 0
- 1890 INC = 2 ^ I
- 1900 H = (X2 - X1) / INC
- 1910 FLG = 1
- 1920 FOR J = 0 TO INC
- 1930 FLG = -(FLG = 0)
- 1940 X = X1 + J * H
- 1950 GOSUB 9000
- 1960 AREA = AREA + Y + Y + 2 * Y * FLG + Y * ((J=0)+(J=INC))
- 1970 NEXT J
- 1980 PRINT "Area found with"INC"steps = "TAB(29) AREA * H / 3
- 1990 NEXT I
- 2000 GOSUB 680
- 2010 RETURN
- 2020 '
- 2030 ' Graph
- 2040 GOSUB 570
- 2050 CLS
- 2060 LOCATE 12,22
- 2070 PRINT "Finding sketch boundaries ...
- 2080 X = X1
- 2090 GOSUB 9000
- 2100 YMIN = Y
- 2110 YMAX = Y
- 2120 FOR I = 0 TO 100
- 2130 X = X1 + I * (X2 - X1) / 100
- 2140 GOSUB 9000
- 2150 IF Y < YMIN THEN YMIN = Y
- 2160 IF Y > YMAX THEN YMAX = Y
- 2170 NEXT I
- 2180 SCREEN 2
- 2190 LOCATE 3,1
- 2200 PRINT YMAX
- 2210 LOCATE 20,1
- 2220 PRINT YMIN
- 2230 LOCATE 22,12
- 2240 PRINT X1;TAB(77-LEN(STR$(X2)))X2
- 2250 LOCATE 1,35
- 2260 PRINT "SKETCH OF Y = f(X)
- 2270 LINE (92,164)-(608,16),,B
- 2280 LINE (98,162)-(602,18),,B
- 2290 PAINT (95,161)
- 2300 FOR I = 0 TO 500 STEP 5
- 2310 X = X1 + I * (X2 - X1) / 500
- 2320 GOSUB 9000
- 2330 IF I THEN 2360
- 2340 PSET (100 + I, 160 - 140 * (Y - YMIN) / (YMAX - YMIN))
- 2350 GOTO 2370
- 2360 LINE -(100 + I, 160 - 140 * (Y - YMIN) / (YMAX - YMIN))
- 2370 NEXT I
- 2380 LOCATE 25,14
- 2390 GOSUB 710
- 2400 SCREEN 0,0,0,0
- 2410 RETURN
- 2420 '
- 2430 ' Value of f(X)
- 2440 GOSUB 510
- 2450 GOSUB 9000
- 2460 PRINT
- 2470 PRINT "Value of f(X) at X = ";X;" is Y = ";Y
- 2480 GOSUB 680
- 2490 RETURN
- 2500 '
- 2510 ' First derivative
- 2520 GOSUB 510
- 2530 CLS
- 2540 PRINT ," DELTA"," SLOPE ... at X = ";X
- 2550 PRINT
- 2560 FOR I = 0 TO 4
- 2570 DELTA = VAL("1E-"+STR$(I))
- 2580 GOSUB 770
- 2590 PRINT ,DELTA,SLOPE
- 2600 NEXT I
- 2610 GOSUB 680
- 2620 RETURN
- 2630 '
- 2640 ' Subroutine, user defined Y = f(X)
- 9000 IF X = 0 THEN Y = 1 ELSE Y = SIN(X)/X
- 9010 RETURN
-